// 请求中的队列
// 相同接口多次请求，上一个请求还没结束，下一个请求就发起时
// 取消上一次的请求
const _queue = new Map();
export const requestQueue = {
  // 请求队列
  // _queue: new Map(),
  // 取消请求
  cancelRequest: function (sign) {
    // 取消队列中的一个请求
    if (sign) {
      const cancel = _queue.get(sign);
      if (cancel && typeof cancel === 'function') {
        // 执行取消axios请求操作
        cancel();
      }
      // 从队列中删除
      _queue.delete(sign);
      return;
    }
    // 清空队列
    _queue.forEach((v, k) => {
      this.cancelRequest(k);
    });
  },
  // 获取请求唯一标识
  getRequestSign: function (config) {
    return config.url;
  },
  // 添加队列
  add: function (config, source) {
    const sign = this.getRequestSign(config);
    config.sign = sign;
    config.cancelToken = source.token;
    // 取消相同sign请求
    this.cancel(sign);
    // 添加到队列中
    _queue.set(sign, source.cancel);
  },
  // 移除队列
  remove: function (config) {
    config && _queue.delete(config.sign);
  },
  // 取消请求，判断是否在【不能同时请求的接口集合】里
  cancel: function (sign) {
    this.cancelRequest(sign);
  }
};
